﻿<?php

if (!defined('CEFIRO')) define("CEFIRO",substr(__FILE__,0,strpos(__FILE__,"cefiro"))."cefiro/widgets/cefiro.php");
require_once(CEFIRO);

class SQL_FILE {
  const CONEXION = 'host=192.168.1.110 port=5432 dbname=sigelab user=sigelabp password=s1g3l4B';
  const INSERTAR_ARCHIVO = 'INSERT INTO iarchivo (idiarchivo, nombre, descripcion, mime, tamano, oidarchivo) VALUES ($1, $2, $3, $4, $5, $6)';
  const ULTIMO_ARCHIVO = 'SELECT idiarchivo FROM iarchivo ORDER BY idiarchivo DESC LIMIT 1';
  const OID_ARCHIVO = 'SELECT oidarchivo FROM iarchivo WHERE idiarchivo = $1';
  const CONSULTAR_ARCHIVO = 'SELECT * FROM iarchivo WHERE idiarchivo = $1';
  const ELIMINAR_ARCHIVO = 'DELETE FROM iarchivo WHERE idiarchivo = $1';
}

class ReqFile{
  function insertarArchivo($filename, $size, $data, $mime, $idarchivo = null) {
    $conn = pg_pconnect(SQL_FILE::CONEXION);
    pg_query($conn, "BEGIN");
    if ($idarchivo == null) {
      $rs = pg_query($conn, SQL_FILE::ULTIMO_ARCHIVO);
      $tabla = pg_fetch_row($rs);
      if ($tabla[0] == null){
        $idarchivo = 1;
      } else {
        $idarchivo = $tabla[0] + 1;
      }
    }
    $oid = pg_lo_create($conn);
    pg_query_params($conn, SQL_FILE::INSERTAR_ARCHIVO,
      array($idarchivo, $filename, "archivo $idarchivo", $mime, $size, $oid));
    $handle = pg_lo_open($conn, $oid, "w");
    pg_lo_write($handle, $data);
    pg_lo_close($handle);
    pg_query($conn, "COMMIT");
    return $idarchivo;
  }

  function consultarArchivo($idarchivo) {
    $conn = pg_pconnect(SQL_FILE::CONEXION);
    $rs = pg_query_params($conn, SQL_FILE::CONSULTAR_ARCHIVO, array($idarchivo));
    $tabla = pg_fetch_all($rs);
    return $tabla[0];
  }

  function eliminarArchivo($idarchivo) {
    $conn = pg_pconnect(SQL_FILE::CONEXION);
    pg_query($conn, "BEGIN");
    $rs = pg_query_params($conn, SQL_FILE::OID_ARCHIVO, array($idarchivo));
    $oid = pg_fetch_result($rs,0,0);
    pg_lo_unlink($conn, $oid);
    pg_query_params($conn, SQL_FILE::ELIMINAR_ARCHIVO, array($idarchivo));
    pg_query($conn, "COMMIT");
  }

  function mostrarArchivo($mime, $tamano, $nombre, $oid){
    header("Content-type: ".$mime);
    header("Content-length: ".$tamano);
    header("Content-Disposition: attachment; filename=\"$nombre.\"");
    $conn = pg_pconnect(SQL_FILE::CONEXION);
    pg_query($conn, "BEGIN");
    $handle = pg_lo_open($conn, $oid, "r");
    pg_lo_read_all($handle);
    pg_query($conn, "COMMIT");
  }
}

function request( $varname, $default='', $sufijo=null){
  if (isset($_REQUEST[$varname])){
    $var = $_REQUEST[$varname];
    // para las variables que vienen por codigo de barras con una letra al final
    if ($sufijo != null && $var[strlen($var)-1] == $sufijo)
      $var = substr($var,0,strlen($var)-1);
    return $var;
  } else {
    return $default;
  }
}

function getFile($name='archivo'){
  if (isset($_FILES[$name]) && $_FILES[$name]['name'] != '') {
    $tmp_name = $_FILES[$name]['tmp_name'];
    $fp = fopen($tmp_name, 'rb');
    $buffer = fread($fp, filesize($tmp_name));
    return array('data' => $buffer,
    'filename' => $_FILES[$name]['name'],
    'mime' => $_FILES[$name]['type'],
    'size' => $_FILES[$name]['size'],
    'tmpname' => $tmp_name );
  } else {
    return null;
  }
}
?>